package com.bto.solar.work.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author 王小波
 * @description: 业务流程服务  对应数据库表 order_status
 * @date 2023/7/11 10:15
 */

@Slf4j
@Service
public class BtoBusinessFlowService {
//    @Autowired
//    private IOrderStatusService orderStatusService;
//    @Autowired
//    private ITasksService tasksService;
//    @Autowired
//    private ITaskStateService taskStateService;
//    @Autowired
//    private IOrderCategoryService orderCategoryService;
//    @Autowired
//    private IDutyStatusService dutyStatusService;
//
//
//    /**
//     * 根据业务类型查询对应的业务流程，并排序
//     */
//    public List<OrderStatus> getBtoBusinessFlowByCateGoryId(Integer orderCategoryId) {
//        LambdaQueryWrapper<OrderStatus> query = new LambdaQueryWrapper<>();
//        query.eq(OrderStatus::getCategoryId, orderCategoryId);
//        query.orderByAsc(OrderStatus::getSort);
//        List<OrderStatus> businessFlow = orderStatusService.getBusinessFlow(query);
//        log.info("查询业务id: {} ，流程 {}", orderCategoryId, businessFlow);
//        return businessFlow;
//    }
//
//    /**
//     * 根据业务类型查询对应的业务的第一个起始流程: 创建该业务时的预选项（app创建业务的弹窗预选项）
//     */
//    public List<OrderStatus> getBtoBusinessFirstFlowPreSelectionByCateGoryId(Integer orderCategoryId) {
//        LambdaQueryWrapper<OrderStatus> query = new LambdaQueryWrapper<>();
//        query.eq(OrderStatus::getCategoryId, orderCategoryId);
//        query.eq(OrderStatus::getIsFirst, true);
//        //该业务流程升序排序
//        query.orderByAsc(OrderStatus::getSort);
//        List<OrderStatus> orderStatusList = orderStatusService.list(query);
//        log.info("查询业务id: {} ，first 预选流程 {}", orderCategoryId, orderStatusList.toString());
//        return orderStatusList;
//    }
//
//
//    public OrderStatus getOrderStatusById(Integer orderStatusId) {
//        return orderStatusService.getById(orderStatusId);
//    }
//
//    /**
//     * 根据任务id 查任务
//     */
//    public Tasks getTaskId(Integer taskId) {
//        Tasks tasks = tasksService.getById(taskId);
//        log.info("查询 根据任务id {} 查询任务 {}", taskId, tasks.toString());
//        return tasks;
//    }
//
//
//    /**
//     * 根据业务流程id，查询该流程下需要处理的任务
//     */
//    public List<Tasks> getTasksByOrderStatusId(Integer businessFlowId) {
//        Tasks query = new Tasks();
//        query.setStatusId(businessFlowId);
//        //只查询一级任务
//        query.setParentId(0);
//        List<Tasks> tasks = tasksService.getTasks(query);
//        log.info("查询业务流程id: {} ，该流程下的任务 {}", businessFlowId, tasks.toString());
//        return tasks;
//    }
//
//
//    /**
//     * 检查业务分类 - 业务阶段 - 任务  之间的id 关系是否合法
//     * 说明： 数据库表设逻辑： 任务表 包含  阶段id  阶段  包含 分类id   在查询是，经常是三个参数一起上传，需要校验参数关系是否正确的关联关系
//     */
//    public void bizCategoryOrderStatusTaskRelationshipCheck(Integer bizCategoryId, Integer orderStatusId, Integer taskId) {
//        OrderStatus orderStatus = orderStatusService.getById(orderStatusId);
//        //判断阶段id 和 分类是否匹配
//        if (null == orderStatus || (null != bizCategoryId && !orderStatus.getCategoryId().equals(bizCategoryId))) {
//            throw new BizException("请求的 业务阶段id {}  业务分类id {} 不匹配 ， 请检查", orderStatusId, bizCategoryId);
//        }
//
//        LambdaQueryWrapper<Tasks> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(Tasks::getStatusId, orderStatusId);
//        queryWrapper.eq(Tasks::getId, taskId);
//        Tasks task = tasksService.getOne(queryWrapper);
//        if (null == task) {
//            throw new BizException("请求的 业务分类id {} 业务阶段id {}  阶段任务id {} 不匹配勤检查", bizCategoryId, orderStatusId, taskId);
//        }
//
//    }
//
//
//
//    /**
//    * 根据阶段id 查询匹配的职责
//    */
//    public List<DutyStatus> getDutyStatusByOrderStatusId(Integer orderStatusId){
//        return dutyStatusService.lambdaQuery()
//                .eq(DutyStatus::getStatusId, orderStatusId).list();
//    }
//
//    /**
//     * 查询指定的任务和状态
//     */
//    public TaskState getTaskStateByTaskIdAndState(Integer taskId, Integer state) {
//        TaskState taskState = taskStateService.lambdaQuery().eq(TaskState::getTaskId, taskId).eq(TaskState::getState, state).one();
//        if(null == taskState){
//            throw new BizException("无法找到 任务id {} 的状态 {}"  ,taskId , state);
//        }
//        return taskState;
//    }
//
//    /**
//     * 查询指定的状态的任务状态数据
//     */
//    public List<TaskState> getTaskStateByTaskState(Integer taskState) {
//        List<TaskState> taskStates = taskStateService.lambdaQuery().eq(TaskState::getState, taskState).orderByAsc(TaskState::getId).list();
//        if(NullUtils.isEmpty(taskStates)){
//            throw new BizException("无法找到 状态   {} 的任何状态"  ,taskState );
//        }
//        return taskStates;
//    }
//
//
//    /**
//     * 查询指定的任务的全部状态
//     */
//    public List<TaskState> getTaskStateByTaskId(Integer taskId) {
//        List<TaskState> taskStates = taskStateService.lambdaQuery().eq(TaskState::getTaskId, taskId).orderByAsc(TaskState::getId).list();
//        if(NullUtils.isEmpty(taskStates)){
//            throw new BizException("无法找到 任务id {} 的任何状态"  ,taskId );
//        }
//        return taskStates;
//    }
//
//
//    /**
//     * 检查任务的子任务
//     */
//    public List<Tasks> getTaskChildren(Integer taskId){
//        Tasks task = tasksService.getById(taskId);
//        if(null == task){
//            throw new BizException("无法找到 task {}" , taskId);
//        }
//
//        return tasksService.lambdaQuery()
//                .eq(Tasks::getParentId, task.getId())
////                .eq(Tasks::getNecessary , true)
//                .isNotNull(Tasks::getRequireWith)
//                .list();
//    }
//
//
//    /**
//    * 检查任务的兄弟任务（排除自己）
//    */
//    public List<Tasks> getTaskBrotherTasks(Integer taskId){
//        Tasks task = tasksService.getById(taskId);
//        if(null == task){
//            throw new BizException("无法找到 task {}" , taskId);
//        }
//
//        return tasksService.lambdaQuery()
//                .eq(Tasks::getParentId, task.getParentId())
//                .ne(Tasks::getId ,taskId)
//                .eq(Tasks::getNecessary , true)
//                .isNotNull(Tasks::getRequireWith)
//                .list();
//    }
//
//
//    /**
//    *  查找前一个阶段
//    */
//    public OrderStatus getPreviousOrderStatus(Integer curOrderStatusId) {
//        OrderStatus orderStatus = orderStatusService.getById(curOrderStatusId);
//        return orderStatusService.lambdaQuery()
//                .eq(OrderStatus::getCategoryId, orderStatus.getCategoryId())
//                .orderByAsc(OrderStatus::getSort)
//                //小于当前排序
//                .lt(OrderStatus::getSort, orderStatus.getSort()).last("LIMIT 1").one();
//
//    }
//
//
//    /**
//     *  查找下一个阶段
//     */
//    public OrderStatus getNextOrderStatus(Integer curOrderStatusId) {
//        OrderStatus orderStatus = orderStatusService.getById(curOrderStatusId);
//        return orderStatusService.lambdaQuery()
//                .eq(OrderStatus::getCategoryId, orderStatus.getCategoryId())
//                .orderByAsc(OrderStatus::getSort)
//                //大于当前排序
//                .gt(OrderStatus::getSort, orderStatus.getSort()).last("LIMIT 1").one();
//    }
//
//
//    /**
//     * 通过业务类型/categoryId分页查询业务阶段
//     */
//    public Page<OrderStatus> getOrderStatusPage(Integer categoryId, Integer currentPage, Integer pageSize) {
//        if (NullUtils.isNull(categoryId) || NullUtils.isNull(currentPage) || NullUtils.isNull(pageSize)) {
//            throw new BizException(BizCode.PARAM_ERROR);
//        }
//        Page<OrderStatus> orderStatusPage = new Page<>(currentPage, pageSize);
//        orderStatusService.getOrderStatusPage(categoryId, orderStatusPage);
//        return orderStatusPage;
//    }
//
//    /**
//     *通过订单类型categoryId全部查询业务阶段
//     */
//    public List<OrderStatus> getOrderStatusAll(Integer categoryId) {
//        if (NullUtils.isNull(categoryId)) {
//            throw new BizException(BizCode.PARAM_ERROR);
//        }
//        LambdaQueryWrapper<OrderStatus> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(OrderStatus::getCategoryId, categoryId)
//                .ge(OrderStatus::getStatus, 0)
//                .orderByAsc(OrderStatus::getSort);
//        return orderStatusService.getBusinessFlow(queryWrapper);
//    }
//
//    /**
//     * 通过业务流程Id构建任务树
//     */
//    public List<Tasks> getTasksByStatusId (Integer orderStatusId) {
//        if (NullUtils.isNull(orderStatusId)) {
//            throw new BizException(BizCode.PARAM_ERROR);
//        }
//        LambdaQueryWrapper<Tasks> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(Tasks::getStatusId, orderStatusId)
//                .orderByAsc(Tasks::getSort);
//        List<Tasks> taskList = tasksService.getTasks(queryWrapper);
//        Map<String, Tasks> tasksMap = taskList.stream().collect(Collectors.toMap(
//                dbTasks -> dbTasks.getId().toString(), dbTasks -> dbTasks
//        ));
//        return TreeUtils.getTree(taskList, tasksMap);
//    }

}
